home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / public / rsynth / src / english.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-02  |  16.4 KB  |  609 lines

  1.  
  2. /*
  3. **      English to Phoneme rules.
  4. **
  5. **      Derived from:
  6. **
  7. **           AUTOMATIC TRANSLATION OF ENGLISH TEXT TO PHONETICS
  8. **                  BY MEANS OF LETTER-TO-SOUND RULES
  9. **
  10. **                      NRL Report 7948
  11. **
  12. **                    January 21st, 1976
  13. **          Naval Research Laboratory, Washington, D.C.
  14. **
  15. **
  16. **      Published by the National Technical Information Service as
  17. **      document "AD/A021 929".
  18. **
  19. **
  20. **
  21. **      The Phoneme codes:
  22. **
  23. **              IY      bEEt            IH      bIt
  24. **              EY      gAte            EH      gEt
  25. **              AE      fAt             AA      fAther
  26. **              AO      lAWn            OW      lOne
  27. **              UH      fUll            UW      fOOl
  28. **              ER      mURdER          AX      About
  29. **              AH      bUt             AY      hIde
  30. **              AW      hOW             OY      tOY
  31. **
  32. **              p       Pack            b       Back
  33. **              t       Time            d       Dime
  34. **              k       Coat            g       Goat
  35. **              f       Fault           v       Vault
  36. **              TH      eTHer           DH      eiTHer
  37. **              s       Sue             z       Zoo
  38. **              SH      leaSH           ZH      leiSure
  39. **              HH      How             m       suM
  40. **              n       suN             NG      suNG
  41. **              l       Laugh           w       Wear
  42. **              y       Young           r       Rate
  43. **              CH      CHar            j       Jar
  44. **              WH      WHere
  45. **
  46. **
  47. **      Rules are made up of four parts:
  48. **
  49. **              The left context.
  50. **              The text to match.
  51. **              The right context.
  52. **              The phonemes to substitute for the matched text.
  53. **
  54. **      Procedure:
  55. **
  56. **              Seperate each block of letters (apostrophes included)
  57. **              and add a space on each side.  For each unmatched
  58. **              letter in the word, look through the rules where the
  59. **              text to match starts with the letter in the word.  If
  60. **              the text to match is found and the right and left
  61. **              context patterns also match, output the phonemes for
  62. **              that rule and skip to the next unmatched letter.
  63. **
  64. **
  65. **      Special Context Symbols:
  66. **
  67. **              #       One or more vowels
  68. **              :       Zero or more consonants
  69. **              ^       One consonant.
  70. **              .       One of B, D, V, G, J, L, M, N, R, W or Z (voiced
  71. **                      consonants)
  72. **              %       One of ER, E, ES, ED, ING, ELY (a suffix)
  73. **                      (Found in right context only)
  74. **              +       One of E, I or Y (a "front" vowel)
  75. **
  76. */
  77.  
  78.  
  79. /* Context definitions */
  80. static char Anything[] = "";
  81.  /* No context requirement */
  82.  
  83. static char Nothing[] = " ";
  84.  /* Context is beginning or end of word */
  85.  
  86. static char Silent[] = "";
  87.  /* No phonemes */
  88.  
  89.  
  90. #define LEFT_PART       0
  91. #define MATCH_PART      1
  92. #define RIGHT_PART      2
  93. #define OUT_PART        3
  94.  
  95. typedef char *Rule[4];
  96.  /* Rule is an array of 4 character pointers */
  97.  
  98.  
  99. /*0 = Punctuation */
  100. /*
  101. **      LEFT_PART       MATCH_PART      RIGHT_PART      OUT_PART
  102. */
  103.  
  104.  
  105. static Rule punct_rules[] =
  106. {
  107.  {Anything, " ", Anything, " "},
  108.  {Anything, "-", Anything, ""},
  109.  {".", "'S", Anything, "z"},
  110.  {"#:.E", "'S", Anything, "z"},
  111.  {"#", "'S", Anything, "z"},
  112.  {Anything, "'", Anything, ""},
  113.  {Anything, ",", Anything, " "},
  114.  {Anything, ".", Anything, " "},
  115.  {Anything, "?", Anything, " "},
  116.  {Anything, "!", Anything, " "},
  117.  {Anything, 0, Anything, Silent},
  118. };
  119.  
  120. static Rule A_rules[] =
  121. {
  122.  {Anything, "A", Nothing, "@"},
  123.  {Nothing, "ARE", Nothing, "0r"},
  124.  {Nothing, "AR", "O", "@r"},
  125.  {Anything, "AR", "#", "er"},
  126.  {"^", "AS", "#", "eIs"},
  127.  {Anything, "A", "WA", "@"},
  128.  {Anything, "AW", Anything, "O"},
  129.  {" :", "ANY", Anything, "eni"},
  130.  {Anything, "A", "^+#", "eI"},
  131.  {"#:", "ALLY", Anything, "@li"},
  132.  {Nothing, "AL", "#", "@l"},
  133.  {Anything, "AGAIN", Anything, "@gen"},
  134.  {"#:", "AG", "E", "IdZ"},
  135.  {Anything, "A", "^+:#", "&"},
  136.  {" :", "A", "^+ ", "eI"},
  137.  {Anything, "A", "^%", "eI"},
  138.  {Nothing, "ARR", Anything, "@r"},
  139.  {Anything, "ARR", Anything, "&r"},
  140.  {" :", "AR", Nothing, "0r"},
  141.  {Anything, "AR", Nothing, "3"},
  142.  {Anything, "AR", Anything, "0r"},
  143.  {Anything, "AIR", Anything, "er"},
  144.  {Anything, "AI", Anything, "eI"},
  145.  {Anything, "AY", Anything, "eI"},
  146.  {Anything, "AU", Anything, "O"},
  147.  {"#:", "AL", Nothing, "@l"},
  148.  {"#:", "ALS", Nothing, "@lz"},
  149.  {Anything, "ALK", Anything, "Ok"},
  150.  {Anything, "AL", "^", "Ol"},
  151.  {" :", "ABLE", Anything, "eIb@l"},
  152.  {Anything, "ABLE", Anything, "@b@l"},
  153.  {Anything, "ANG", "+", "eIndZ"},
  154.  {"^", "A", "^#", "eI"},
  155.  {Anything, "A", Anything, "&"},
  156.  {Anything, 0, Anything, Silent},
  157. };
  158.  
  159. static Rule B_rules[] =
  160. {
  161.  {Nothing, "BE", "^#", "bI"},
  162.  {Anything, "BEING", Anything, "biIN"},
  163.  {Nothing, "BOTH", Nothing, "b@UT"},
  164.  {Nothing, "BUS", "#", "bIz"},
  165.  {Anything, "BUIL", Anything, "bIl"},
  166.  {Anything, "B", Anything, "b"},
  167.  {Anything, 0, Anything, Silent},
  168. };
  169.  
  170. static Rule C_rules[] =
  171. {
  172.  {Nothing, "CH", "^", "k"},
  173.  {"^E", "CH", Anything, "k"},
  174.  {Anything, "CH", Anything, "tS"},
  175.  {" S", "CI", "#", "saI"},
  176.  {Anything, "CI", "A", "S"},
  177.  {Anything, "CI", "O", "S"},
  178.  {Anything, "CI", "EN", "S"},
  179.  {Anything, "C", "+", "s"},
  180.  {Anything, "CK", Anything, "k"},
  181.  {Anything, "COM", "%", "kVm"},
  182.  {Anything, "C", Anything, "k"},
  183.  {Anything, 0, Anything, Silent},
  184. };
  185.  
  186. static Rule D_rules[] =
  187. {
  188.  {"#:", "DED", Nothing, "dId"},
  189.  {".E", "D", Nothing, "d"},
  190.  {"#:^E", "D", Nothing, "t"},
  191.  {Nothing, "DE", "^#", "dI"},
  192.  {Nothing, "DO", Nothing, "du"},
  193.  {Nothing, "DOES", Anything, "dVz"},
  194.  {Nothing, "DOING", Anything, "duIN"},
  195.  {Nothing, "DOW", Anything, "daU"},
  196.  {Anything, "DU", "A", "dZu"},
  197.  {Anything, "D", Anything, "d"},
  198.  {Anything, 0, Anything, Silent},
  199. };
  200.  
  201. static Rule E_rules[] =
  202. {
  203.  {"#:", "E", Nothing, ""},
  204.  {"':^", "E", Nothing, ""},
  205.  {" :", "E", Nothing, "i"},
  206.  {"#", "ED", Nothing, "d"},
  207.  {"#:", "E", "D ", ""},
  208.  {Anything, "EV", "ER", "ev"},
  209.  {Anything, "E", "^%", "i"},
  210.  {Anything, "ERI", "#", "iri"},
  211.  {Anything, "ERI", Anything, "erI"},
  212.  {"#:", "ER", "#", "3"},
  213.  {Anything, "ER", "#", "er"},
  214.  {Anything, "ER", Anything, "3"},
  215.  {Nothing, "EVEN", Anything, "iven"},
  216.  {"#:", "E", "W", ""},
  217.  {"T", "EW", Anything, "u"},
  218.  {"S", "EW", Anything, "u"},
  219.  {"R", "EW", Anything, "u"},
  220.  {"D", "EW", Anything, "u"},
  221.  {"L", "EW", Anything, "u"},
  222.  {"Z", "EW", Anything, "u"},
  223.  {"N", "EW", Anything, "u"},
  224.  {"J", "EW", Anything, "u"},
  225.  {"TH", "EW", Anything, "u"},
  226.  {"CH", "EW", Anything, "u"},
  227.  {"SH", "EW", Anything, "u"},
  228.  {Anything, "EW", Anything, "ju"},
  229.  {Anything, "E", "O", "i"},
  230.  {"#:S", "ES", Nothing, "Iz"},
  231.  {"#:C", "ES", Nothing, "Iz"},
  232.  {"#:G", "ES", Nothing, "Iz"},
  233.  {"#:Z", "ES", Nothing, "Iz"},
  234.  {"#:X", "ES", Nothing, "Iz"},
  235.  {"#:J", "ES", Nothing, "Iz"},
  236.  {"#:CH", "ES", Nothing, "Iz"},
  237.  {"#:SH", "ES", Nothing, "Iz"},
  238.  {"#:", "E", "S ", ""},
  239.  {"#:", "ELY", Nothing, "li"},
  240.  {"#:", "EMENT", Anything, "ment"},
  241.  {Anything, "EFUL", Anything, "fUl"},
  242.  {Anything, "EE", Anything, "i"},
  243.  {Anything, "EARN", Anything, "3n"},
  244.  {Nothing, "EAR", "^", "3"},
  245.  {Anything, "EAD", Anything, "ed"},
  246.  {"#:", "EA", Nothing, "i@"},
  247.  {Anything, "EA", "SU", "e"},
  248.  {Anything, "EA", Anything, "i"},
  249.  {Anything, "EIGH", Anything, "eI"},
  250.  {Anything, "EI", Anything, "i"},
  251.  {Nothing, "EYE", Anything, "aI"},
  252.  {Anything, "EY", Anything, "i"},
  253.  {Anything, "EU", Anything, "ju"},
  254.  {Anything, "E", Anything, "e"},
  255.  {Anything, 0, Anything, Silent},
  256. };
  257.  
  258. static Rule F_rules[] =
  259. {
  260.  {Anything, "FUL", Anything, "fUl"},
  261.  {Anything, "F", Anything, "f"},
  262.  {Anything, 0, Anything, Silent},
  263. };
  264.  
  265. static Rule G_rules[] =
  266. {
  267.  {Anything, "GIV", Anything, "gIv"},
  268.  {Nothing, "G", "I^", "g"},
  269.  {Anything, "GE", "T", "ge"},
  270.  {"SU", "GGES", Anything, "gdZes"},
  271.  {Anything, "GG", Anything, "g"},
  272.  {" B#", "G", Anything, "g"},
  273.  {Anything, "G", "+", "dZ"},
  274.  {Anything, "GREAT", Anything, "greIt"},
  275.  {"#", "GH", Anything, ""},
  276.  {Anything, "G", Anything, "g"},
  277.  {Anything, 0, Anything, Silent},
  278. };
  279.  
  280. static Rule H_rules[] =
  281. {
  282.  {Nothing, "HAV", Anything, "h&v"},
  283.  {Nothing, "HERE", Anything, "hir"},
  284.  {Nothing, "HOUR", Anything, "aU3"},
  285.  {Anything, "HOW", Anything, "haU"},
  286.  {Anything, "H", "#", "h"},
  287.  {Anything, "H", Anything, ""},
  288.  {Anything, 0, Anything, Silent},
  289. };
  290.  
  291. static Rule I_rules[] =
  292. {
  293.  {Nothing, "IAIN", Nothing, "I@n"},
  294.  {Nothing, "ING", Nothing, "IN"},
  295.  {Nothing, "IN", Anything, "In"},
  296.  {Nothing, "I", Nothing, "aI"},
  297.  {Anything, "IN", "D", "aIn"},
  298.  {Anything, "IER", Anything, "i3"},
  299.  {"#:R", "IED", Anything, "id"},
  300.  {Anything, "IED", Nothing, "aId"},
  301.  {Anything, "IEN", Anything, "ien"},
  302.  {Anything, "IE", "T", "aIe"},
  303.  {" :", "I", "%", "aI"},
  304.  {Anything, "I", "%", "i"},
  305.  {Anything, "IE", Anything, "i"},
  306.  {Anything, "I", "^+:#", "I"},
  307.  {Anything, "IR", "#", "aIr"},
  308.  {Anything, "IZ", "%", "aIz"},
  309.  {Anything, "IS", "%", "aIz"},
  310.  {Anything, "I", "D%", "aI"},
  311.  {"+^", "I", "^+", "I"},
  312.  {Anything, "I", "T%", "aI"},
  313.  {"#:^", "I", "^+", "I"},
  314.  {Anything, "I", "^+", "aI"},
  315.  {Anything, "IR", Anything, "3"},
  316.  {Anything, "IGH", Anything, "aI"},
  317.  {Anything, "ILD", Anything, "aIld"},
  318.  {Anything, "IGN", Nothing, "aIn"},
  319.  {Anything, "IGN", "^", "aIn"},
  320.  {Anything, "IGN", "%", "aIn"},
  321.  {Anything, "IQUE", Anything, "ik"},
  322.  {"^", "I", "^#", "aI"},
  323.  {Anything, "I", Anything, "I"},
  324.  {Anything, 0, Anything, Silent},
  325. };
  326.  
  327. static Rule J_rules[] =
  328. {
  329.  {Anything, "J", Anything, "dZ"},
  330.  {Anything, 0, Anything, Silent},
  331. };
  332.  
  333. static Rule K_rules[] =
  334. {
  335.  {Nothing, "K", "N", ""},
  336.  {Anything, "K", Anything, "k"},
  337.  {Anything, 0, Anything, Silent},
  338. };
  339.  
  340. static Rule L_rules[] =
  341. {
  342.  {Anything, "LO", "C#", "l@U"},
  343.  {"L", "L", Anything, ""},
  344.  {"#:^", "L", "%", "@l"},
  345.  {Anything, "LEAD", Anything, "lid"},
  346.  {Anything, "L", Anything, "l"},
  347.  {Anything, 0, Anything, Silent},
  348. };
  349.  
  350. static Rule M_rules[] =
  351. {
  352.  {Anything, "MOV", Anything, "muv"},
  353.  {"#", "MM", "#", "m"},
  354.  {Anything, "M", Anything, "m"},
  355.  {Anything, 0, Anything, Silent},
  356. };
  357.  
  358. static Rule N_rules[] =
  359. {
  360.  {"E", "NG", "+", "ndZ"},
  361.  {Anything, "NG", "R", "Ng"},
  362.  {Anything, "NG", "#", "Ng"},
  363.  {Anything, "NGL", "%", "Ng@l"},
  364.  {Anything, "NG", Anything, "N"},
  365.  {Anything, "NK", Anything, "Nk"},
  366.  {Nothing, "NOW", Nothing, "naU"},
  367.  {"#",     "NG", Nothing, "Ng"},
  368.  {Anything, "N", Anything, "n"},
  369.  {Anything, 0, Anything, Silent},
  370. };
  371.  
  372. static Rule O_rules[] =
  373. {
  374.  {Anything, "OF", Nothing, "@v"},
  375.  {Anything, "OROUGH", Anything, "3@U"},
  376.  {"#:", "OR", Nothing, "3"},
  377.  {"#:", "ORS", Nothing, "3z"},
  378.  {Anything, "OR", Anything, "Or"},
  379.  {Nothing, "ONE", Anything, "wVn"},
  380.  {Anything, "OW", Anything, "@U"},
  381.  {Nothing, "OVER", Anything, "@Uv3"},
  382.  {Anything, "OV", Anything, "Vv"},
  383.  {Anything, "O", "^%", "@U"},
  384.  {Anything, "O", "^EN", "@U"},
  385.  {Anything, "O", "^I#", "@U"},
  386.  {Anything, "OL", "D", "@Ul"},
  387.  {Anything, "OUGHT", Anything, "Ot"},
  388.  {Anything, "OUGH", Anything, "Vf"},
  389.  {Nothing, "OU", Anything, "aU"},
  390.  {"H", "OU", "S#", "aU"},
  391.  {Anything, "OUS", Anything, "@s"},
  392.  {Anything, "OUR", Anything, "Or"},
  393.  {Anything, "OULD", Anything, "Ud"},
  394.  {"^", "OU", "^L", "V"},
  395.  {Anything, "OUP", Anything, "up"},
  396.  {Anything, "OU", Anything, "aU"},
  397.  {Anything, "OY", Anything, "oI"},
  398.  {Anything, "OING", Anything, "@UIN"},
  399.  {Anything, "OI", Anything, "oI"},
  400.  {Anything, "OOR", Anything, "Or"},
  401.  {Anything, "OOK", Anything, "Uk"},
  402.  {Anything, "OOD", Anything, "Ud"},
  403.  {Anything, "OO", Anything, "u"},
  404.  {Anything, "O", "E", "@U"},
  405.  {Anything, "O", Nothing, "@U"},
  406.  {Anything, "OA", Anything, "@U"},
  407.  {Nothing, "ONLY", Anything, "@Unli"},
  408.  {Nothing, "ONCE", Anything, "wVns"},
  409.  {Anything, "ON'T", Anything, "@Unt"},
  410.  {"C", "O", "N", "0"},
  411.  {Anything, "O", "NG", "O"},
  412.  {" :^", "O", "N", "V"},
  413.  {"I", "ON", Anything, "@n"},
  414.  {"#:", "ON", Nothing, "@n"},
  415.  {"#^", "ON", Anything, "@n"},
  416.  {Anything, "O", "ST ", "@U"},
  417.  {Anything, "OF", "^", "Of"},
  418.  {Anything, "OTHER", Anything, "VD3"},
  419.  {Anything, "OSS", Nothing, "Os"},
  420.  {"#:^", "OM", Anything, "Vm"},
  421.  {Anything, "O", Anything, "0"},
  422.  {Anything, 0, Anything, Silent},
  423. };
  424.  
  425. static Rule P_rules[] =
  426. {
  427.  {Anything, "PH", Anything, "f"},
  428.  {Anything, "PEOP", Anything, "pip"},
  429.  {Anything, "POW", Anything, "paU"},
  430.  {Anything, "PUT", Nothing, "pUt"},
  431.  {Anything, "P", Anything, "p"},
  432.  {Anything, 0, Anything, Silent},
  433. };
  434.  
  435. static Rule Q_rules[] =
  436. {
  437.  {Anything, "QUAR", Anything, "kwOr"},
  438.  {Anything, "QU", Anything, "kw"},
  439.  {Anything, "Q", Anything, "k"},
  440.  {Anything, 0, Anything, Silent},
  441. };
  442.  
  443. static Rule R_rules[] =
  444. {
  445.  {Nothing, "RE", "^#", "ri"},
  446.  {Anything, "R", Anything, "r"},
  447.  {Anything, 0, Anything, Silent},
  448. };
  449.  
  450. static Rule S_rules[] =
  451. {
  452.  {Anything, "SH", Anything, "S"},
  453.  {"#", "SION", Anything, "Z@n"},
  454.  {Anything, "SOME", Anything, "sVm"},
  455.  {"#", "SUR", "#", "Z3"},
  456.  {Anything, "SUR", "#", "S3"},
  457.  {"#", "SU", "#", "Zu"},
  458.  {"#", "SSU", "#", "Su"},
  459.  {"#", "SED", Nothing, "zd"},
  460.  {"#", "S", "#", "z"},
  461.  {Anything, "SAID", Anything, "sed"},
  462.  {"^", "SION", Anything, "S@n"},
  463.  {Anything, "S", "S", ""},
  464.  {".", "S", Nothing, "z"},
  465.  {"#:.E", "S", Nothing, "z"},
  466.  {"#:^##", "S", Nothing, "z"},
  467.  {"#:^#", "S", Nothing, "s"},
  468.  {"U", "S", Nothing, "s"},
  469.  {" :#", "S", Nothing, "z"},
  470.  {Nothing, "SCH", Anything, "sk"},
  471.  {Anything, "S", "C+", ""},
  472.  {"#", "SM", Anything, "zm"},
  473.  {"#", "SN", "'", "z@n"},
  474.  {Anything, "S", Anything, "s"},
  475.  {Anything, 0, Anything, Silent},
  476. };
  477.  
  478. static Rule T_rules[] =
  479. {
  480.  {Nothing, "THE", Nothing, "D@"},
  481.  {Anything, "TO", Nothing, "tu"},
  482.  {Anything, "THAT", Nothing, "D&t"},
  483.  {Nothing, "THIS", Nothing, "DIs"},
  484.  {Nothing, "THEY", Anything, "DeI"},
  485.  {Nothing, "THERE", Anything, "Der"},
  486.  {Anything, "THER", Anything, "D3"},
  487.  {Anything, "THEIR", Anything, "Der"},
  488.  {Nothing, "THAN", Nothing, "D&n"},
  489.  {Nothing, "THEM", Nothing, "Dem"},
  490.  {Anything, "THESE", Nothing, "Diz"},
  491.  {Nothing, "THEN", Anything, "Den"},
  492.  {Anything, "THROUGH", Anything, "Tru"},
  493.  {Anything, "THOSE", Anything, "D@Uz"},
  494.  {Anything, "THOUGH", Nothing, "D@U"},
  495.  {Nothing, "THUS", Anything, "DVs"},
  496.  {Anything, "TH", Anything, "T"},
  497.  {"#:", "TED", Nothing, "tId"},
  498.  {"S", "TI", "#N", "tS"},
  499.  {Anything, "TI", "O", "S"},
  500.  {Anything, "TI", "A", "S"},
  501.  {Anything, "TIEN", Anything, "S@n"},
  502.  {Anything, "TUR", "#", "tS3"},
  503.  {Anything, "TU", "A", "tSu"},
  504.  {Nothing, "TWO", Anything, "tu"},
  505.  {Anything, "T", Anything, "t"},
  506.  {Anything, 0, Anything, Silent},
  507. };
  508.  
  509. static Rule U_rules[] =
  510. {
  511.  {Nothing, "UN", "I", "jun"},
  512.  {Nothing, "UN", Anything, "Vn"},
  513.  {Nothing, "UPON", Anything, "@pOn"},
  514.  {"T", "UR", "#", "Ur"},
  515.  {"S", "UR", "#", "Ur"},
  516.  {"R", "UR", "#", "Ur"},
  517.  {"D", "UR", "#", "Ur"},
  518.  {"L", "UR", "#", "Ur"},
  519.  {"Z", "UR", "#", "Ur"},
  520.  {"N", "UR", "#", "Ur"},
  521.  {"J", "UR", "#", "Ur"},
  522.  {"TH", "UR", "#", "Ur"},
  523.  {"CH", "UR", "#", "Ur"},
  524.  {"SH", "UR", "#", "Ur"},
  525.  {Anything, "UR", "#", "jUr"},
  526.  {Anything, "UR", Anything, "3"},
  527.  {Anything, "U", "^ ", "V"},
  528.  {Anything, "U", "^^", "V"},
  529.  {Anything, "UY", Anything, "aI"},
  530.  {" G", "U", "#", ""},
  531.  {"G", "U", "%", ""},
  532.  {"G", "U", "#", "w"},
  533.  {"#N", "U", Anything, "ju"},
  534.  {"T", "U", Anything, "u"},
  535.  {"S", "U", Anything, "u"},
  536.  {"R", "U", Anything, "u"},
  537.  {"D", "U", Anything, "u"},
  538.  {"L", "U", Anything, "u"},
  539.  {"Z", "U", Anything, "u"},
  540.  {"N", "U", Anything, "u"},
  541.  {"J", "U", Anything, "u"},
  542.  {"TH", "U", Anything, "u"},
  543.  {"CH", "U", Anything, "u"},
  544.  {"SH", "U", Anything, "u"},
  545.  {Anything, "U", Anything, "ju"},
  546.  {Anything, 0, Anything, Silent},
  547. };
  548.  
  549. static Rule V_rules[] =
  550. {
  551.  {Anything, "VIEW", Anything, "vju"},
  552.  {Anything, "V", Anything, "v"},
  553.  {Anything, 0, Anything, Silent},
  554. };
  555.  
  556. static Rule W_rules[] =
  557. {
  558.  {Nothing, "WERE", Anything, "w3"},
  559.  {Anything, "WA", "S", "w0"},
  560.  {Anything, "WA", "T", "w0"},
  561.  {Anything, "WHERE", Anything, "hwer"},
  562.  {Anything, "WHAT", Anything, "hw0t"},
  563.  {Anything, "WHOL", Anything, "h@Ul"},
  564.  {Anything, "WHO", Anything, "hu"},
  565.  {Anything, "WH", Anything, "hw"},
  566.  {Anything, "WAR", Anything, "wOr"},
  567.  {Anything, "WOR", "^", "w3"},
  568.  {Anything, "WR", Anything, "r"},
  569.  {Anything, "W", Anything, "w"},
  570.  {Anything, 0, Anything, Silent},
  571. };
  572.  
  573. static Rule X_rules[] =
  574. {
  575.  {Anything, "X", Anything, "ks"},
  576.  {Anything, 0, Anything, Silent},
  577. };
  578.  
  579. static Rule Y_rules[] =
  580. {
  581.  {Anything, "YOUNG", Anything, "jVN"},
  582.  {Nothing, "YOU", Anything, "ju"},
  583.  {Nothing, "YES", Anything, "jes"},
  584.  {Nothing, "Y", Anything, "j"},
  585.  {"#:^", "Y", Nothing, "i"},
  586.  {"#:^", "Y", "I", "i"},
  587.  {" :", "Y", Nothing, "aI"},
  588.  {" :", "Y", "#", "aI"},
  589.  {" :", "Y", "^+:#", "I"},
  590.  {" :", "Y", "^#", "aI"},
  591.  {Anything, "Y", Anything, "I"},
  592.  {Anything, 0, Anything, Silent},
  593. };
  594.  
  595. static Rule Z_rules[] =
  596. {
  597.  {Anything, "Z", Anything, "z"},
  598.  {Anything, 0, Anything, Silent},
  599. };
  600.  
  601. Rule *Rules[] =
  602. {
  603.  punct_rules,
  604.  A_rules, B_rules, C_rules, D_rules, E_rules, F_rules, G_rules,
  605.  H_rules, I_rules, J_rules, K_rules, L_rules, M_rules, N_rules,
  606.  O_rules, P_rules, Q_rules, R_rules, S_rules, T_rules, U_rules,
  607.  V_rules, W_rules, X_rules, Y_rules, Z_rules
  608. };
  609.